import pandas as pd
from snownlp import SnowNLP
import matplotlib.pyplot as plt
from datetime import datetime

# 1. 数据加载
df = pd.read_excel("/Users/jijiuxue/Downloads/数据分析.xlsx", sheet_name="Sheet2")

# 2. 情绪分析函数（使用SnowNLP中文情感分析）
def classify_sentiment(text):
    score = SnowNLP(text).sentiments
    if score > 0.6:
        return ("积极", score)
    elif score < 0.4:
        return ("消极", score)
    else:
        return ("中性", score)

# 应用情绪分类
df[["情绪标签", "情绪强度"]] = df["评论内容"].apply(
    lambda x: pd.Series(classify_sentiment(x))
)

# 3. 生成统计报告
report = df.groupby("情绪标签").agg(
    评论数量=("用户ID", "count"),
    用户数=("用户ID", pd.Series.nunique),
    平均情绪强度=("情绪强度", "mean")
).reset_index()

# 4. 用户情绪轨迹分析
user_timelines = []
for uid, group in df.groupby("用户ID"):
    timeline = group.sort_values("时间戳").reset_index(drop=True)
    user_timelines.append({
        "用户ID": uid,
        "情绪变化序列": " → ".join(timeline["情绪标签"]),
        "关键转折点": timeline.iloc[[0, -1]][["时间戳", "情绪标签"]].to_dict("records")
    })
    
# 5. 可视化生成
# 设置matplotlib的字体配置
plt.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题
plt.rcParams['font.family'] = 'Kaiti SC'  # 可以替换为其他字体
plt.figure(figsize=(12, 6))
# 情绪分布饼图

ax1 = plt.subplot(121)
df["情绪标签"].value_counts().plot.pie(autopct="%1.1f%%", ax=ax1)
ax1.set_title("情绪分布比例")

# 时间线示例（U001）
ax2 = plt.subplot(122)
u001 = df[df["用户ID"] == "U001"].sort_values("时间戳")
ax2.plot(u001["时间戳"], u001["情绪强度"], marker="o", linestyle="--")
ax2.set_title("U001情绪波动趋势")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("sentiment_analysis.png", dpi=300)

# 6. 导出报告
with pd.ExcelWriter("情绪分析报告.xlsx") as writer:
    df.to_excel(writer, sheet_name="原始数据+情绪标注", index=False)
    pd.DataFrame(report).to_excel(writer, sheet_name="统计摘要", index=False)
    pd.DataFrame(user_timelines).to_excel(writer, sheet_name="用户轨迹", index=False)


# 扩展1：结合业务场景分析
场景分析 = df.groupby(["评论场景", "情绪标签"]).size().unstack()
场景分析.plot(kind="bar", stacked=True, title="各场景情绪分布")

# 扩展2：生成HTML报告
from jinja2 import Template
report_template = Template('''
<h1>情绪分析报告</h1>
<h2>整体分布</h2>{{ pie_chart }}
<h2>典型用户轨迹</h2>
{% for user in timelines %}
  <p>{{ user.用户ID }}: {{ user.情绪变化序列 }}</p>
{% endfor %}
''')


print("分析完成！生成文件：情绪分析报告.xlsx 和 sentiment_analysis.png")